﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Specialized;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace DECOR.Touchapp
{
    public partial class buscarDocumento : System.Web.UI.Page
    {
        //*****************************************************************************
        //estos codigo en duro se encontraron en DocVenta.aspx.cs de la web, revisarlo, por ahora los estamos tomando.
        public string gvSectorVal = "00";
        public string gvGrpVendVal = "100";
        //*****************************************************************************
        PedidoCabeceraBE objPedido = null;
        ClienteBE objCliente = null;
        JavaScriptSerializer jss = null;
        
        string Json = "";
        //**********************************************************************************************
        //Variables comunes entre los diferentes metodos
        string pNumPedido = "";
        string pTipoDoc = "";
        string pCanalDist = "";
        string pOrgVtas = "";
        //**********************************************************************************************
        //Variables para la búsqueda de documento
        string pObjetoPersona = ""; //esta variable tiene que ser enviada desde sencha.
        string pFechaInicio = "";
        string pCodigoMaterial = "";
        string pFechaFin = "";
        string pAuxCod = ""; //es el código de Asesor
        string pnumDoc = "";
        string prefLegal = "";
        string pnombreCliente = "";
        string pNIF = "";
        string pcodCliente = "";
        string pnombreMaterial = "";
        string pDatoBusqueda = "";
        string pTipoDato = "";

        private List<PedidoCabeceraBE> _lstPedidos;

        string _bloqueo = "";
        string _credito = "";
        string _entrega = "";
        string _global = "";
        string _rechazo = "";
        //**********************************************************************************************
        string pRetval = "";
        string pCondicionesPago = ""; //LISTA DE CONDICIONES DE PAGO ENVIADO DESDE EL DISPOSIVITO TOUCH        
        string pCorreo = "";
        string CodVendedorWeb = "";
        string pedidoTratado = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Request.HttpMethod.Equals("POST"))
            {

            }
            else
            {
                CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
                pRetval = "{\"success\":{0}, \"errors\":{\"reason\": \"{1}\"}, \"lstPedidos\":{2} ";
                pRetval += "}";

                jss = new JavaScriptSerializer();
                BuscarDocumento();

                Response.ContentType = "application/json; charset=UTF-8";
                Response.Write(pRetval);
            }
            
        }

        private void BuscarDocumento()
        { 
            PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];

            pTipoDoc = Request.Params["claseDoc"] != null ? Request.Params["claseDoc"] : "";
            pCanalDist = Request.Params["canalDist"] != null ? Request.Params["canalDist"] : "";
            pOrgVtas = Request.Params["OrgVentas"] != null ? Request.Params["OrgVentas"] : "";
            pFechaInicio = Request.Params["fechaInicio"] != null ? Request.Params["fechaInicio"] : "";
            pCodigoMaterial = Request.Params["codigoMaterial"] != null ? Request.Params["codigoMaterial"] : "";
            pFechaFin = Request.Params["fechaFin"] != null ? Request.Params["fechaFin"] : "";
            pAuxCod = Request.Params["codAsesor"] != null ? Request.Params["codAsesor"] : "*";
            pnumDoc = Request.Params["numDoc"] != null ? Request.Params["numDoc"] : "";
            prefLegal = Request.Params["refLegal"] != null ? Request.Params["refLegal"] : "";
            pnombreCliente = Request.Params["nombreCliente"] != null ? Request.Params["nombreCliente"] : "";
            pNIF = Request.Params["Nif"] != null ? Request.Params["Nif"] : "";
            pcodCliente = Request.Params["codCliente"] != null ? Request.Params["codCliente"] : "";
            pnombreMaterial = Request.Params["nMaterial"] != null ? Request.Params["nMaterial"] : "";
            pDatoBusqueda = Request.Params["datoBusqueda"] != null ? Request.Params["datoBusqueda"] : "";
            pTipoDato = Request.Params["tipoBusqueda"] != null ? Request.Params["tipoBusqueda"] : "1";

            if (string.IsNullOrEmpty(pFechaInicio))
            {
                pFechaInicio = DateTime.Today.ToString("dd/MM/yyyy");
            }
            else
            {
                pFechaInicio = Convert.ToDateTime(pFechaInicio.Substring(0, 10)).ToString("dd/MM/yyyy");
            }
            if (string.IsNullOrEmpty(pFechaFin))
            {
                pFechaFin = DateTime.Today.ToString("dd/MM/yyyy");
            }
            else
            {
                pFechaFin = Convert.ToDateTime(pFechaFin.Substring(0, 10)).ToString("dd/MM/yyyy");
            }
            //if (objPersona != null)
            //{
            if (string.IsNullOrEmpty(pAuxCod))
            {
                CodVendedorWeb = ""; //objPersona.CodPersona; 
            }
            
            string auxCod = pAuxCod == "*" ? "0" : pAuxCod;

            if (pDatoBusqueda.Trim().Length > 0)
            {
                switch (pTipoDato)
                {
                    case "1":
                        pnumDoc = pDatoBusqueda;
                        break;
                    case "2":
                        prefLegal = pDatoBusqueda;
                        break;
                    case "3":
                        pnombreCliente = pDatoBusqueda;
                        break;
                    case "4":
                        pNIF = pDatoBusqueda;
                        break;
                    case "5":
                        pcodCliente = pDatoBusqueda;
                        break;
                    case "6":
                        pnombreMaterial = pDatoBusqueda;
                        break;
                }
            }

            List<PedidoDetalleBE> lstDetalle = new List<PedidoDetalleBE>();
            _lstPedidos = PedidoBC.Instance.listaPedidoCabeceraDetalle(pnumDoc, auxCod,
                        Convert.ToDateTime(pFechaInicio), Convert.ToDateTime(pFechaFin),
                        pOrgVtas, pCanalDist, "", prefLegal, pCodigoMaterial, pnombreCliente, pNIF,
                        pnombreMaterial, pcodCliente, out lstDetalle, pTipoDoc);
            
            if (_lstPedidos == null || _lstPedidos.Count <= 0)
            {
                Json = JsonConvert.SerializeObject(_lstPedidos, new IsoDateTimeConverter());
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "No se encontró información para los parámetros seleccionados.");
                pRetval = pRetval.Replace("{2}", "[]");
            }
            else
            {
                if (_lstPedidos.Count > 300)
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Ingrese un filtro de búsqueda, se encontraron demasiados registros.");
                    pRetval = pRetval.Replace("{2}", "[]");
                }
                else
                {
                    Json = JsonConvert.SerializeObject(_lstPedidos, new IsoDateTimeConverter());
                    pRetval = pRetval.Replace("{0}", "true");
                    pRetval = pRetval.Replace("{1}", "");
                    pRetval = pRetval.Replace("{2}", Json);
                }
            }
            
        }

        private void DetalleDocumentoAcciones(string _numPedido, string _accion)
        {
            if (pNumPedido != "")
            {
                if (_accion == "Editar")
                {
                    //string op = Convert.ToString(Session["Operacion"]);
                    PedidoBE objPedido = PedidoBC.Instance.leer(_numPedido);
                    if (objPedido != null)
                    {
                        if (objPedido.Tratado)
                        {
                            Session["PedidoTratado"] = true;
                            pedidoTratado = "true";
                        }
                        Session["Operacion"] = "editar";
                        Session["Cliente"] = ClienteBC.Instance.leer(objPedido.CodCliente);
                        Session["Pedido"] = objPedido;
                        Response.Redirect("DocVenta.aspx");
                    }
                }
                else if (_accion == "Flujo")
                {
                    if (_numPedido.Equals(string.Empty) || _numPedido.Equals("0000000000"))
                    {
                        Session["Mensaje"] = "Número de documento inválido.";
                        //
                    }
                    else
                    {
                        string cadena_padre;
                        List<SeguimientoBE> lstSeguimiento = PedidoBC.Instance.buscaDocumentos(_numPedido);
                        StatusBE objStatus = PedidoBC.Instance.verStatus(_numPedido);

                        if (lstSeguimiento.Count > 0 || objStatus != null)
                        {
                            DataTable dt = Converter<SeguimientoBE>.Convert(lstSeguimiento);

                            dt.Columns.Add("Hijos", typeof(string));
                            string cod;

                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                cadena_padre = "";
                                cod = Convert.ToString(dt.Rows[i]["Jerarquia"]);
                                int longitud = cod.Length - 2;
                                for (int j = 0; j < longitud; j++)
                                {
                                    cadena_padre = cadena_padre + cod[j];
                                }
                                dt.Rows[i]["Hijos"] = cadena_padre;
                            }
                            //serializar el DT y luego las variables de status
                            //----
                            _bloqueo = objStatus.Bloqueo;
                            _credito = objStatus.Credito;
                            _entrega = objStatus.Entrega;
                            _global = objStatus.Global;
                            _rechazo = objStatus.Rechazo;
                        }
                        else
                        {
                            //string mensaje = "No se encontró información para el doc. de ventas especificado.";
                        }
                    }
                }
                else if (_accion == "Detalle")
                {
                    PedidoBE objPedido = PedidoBC.Instance.leer(pNumPedido);
                    GenericBE objTmp = null;
                    List<GenericBE> lstMotivRec = null;

                    foreach (DetalleBE itm in objPedido.Detalle)
                    {
                        if (!string.IsNullOrEmpty(itm.MotivoRechazo))
                        {
                            if (lstMotivRec == null)
                            {
                                lstMotivRec = PedidoBC.Instance.listarMotivosRechazo();
                            }
                            objTmp = lstMotivRec.Find(X => X.Codigo == itm.MotivoRechazo);
                            itm.MotivoRechazo = objTmp != null ? (objTmp.Codigo + "-" + objTmp.Descripcion).Trim() : itm.MotivoRechazo;
                        }
                    }
                    //serializar objPedido.Detalle
                }
            }
        }
    }
}
